﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VideoLink.Links
{
    /// <summary>
    /// Представляет канал передачи и описывает его обязанности
    /// </summary>
    public interface ILink
    {
        /// <summary>
        /// Определяет, установлено ли соединение.
        /// Если установлено (Active = true), то можно начинать передавать,
        /// иначе (Active = false) доставка сообщений не гарантируется
        /// </summary>
        bool Active { get; }

        /// <summary>
        /// Вызывается при изменении состояния процесса передачи файла.
        /// </summary>
        event TransieveStatusHandler SendStatus;

        /// <summary>
        /// Вызывается при изменении состояния процесса получения файла.
        /// </summary>
        event TransieveStatusHandler GetStatus;

        /// <summary>
        /// Вызывается при получении нового файла.
        /// На момент вызова данного события файл уже готов к использованию.
        /// </summary>
        event NewFileHandler NewFileReceived;

        /// <summary>
        /// Открыть подключение.
        /// Необходимо вызывать перед началом передачи.
        /// </summary>
        /// <returns>Код ошибки, возникшей при подключении</returns>
        int OpenDevice();

        /// <summary>
        /// Закрыть подключение и освободить все ресурсы.
        /// После вызова этого метода данный канал непригоден для работы.
        /// </summary>
        /// <returns>Код ошибки, возникшей при отключении</returns>
        int CloseDevice();

        /// <summary>
        /// Передать файл
        /// </summary>
        /// <param name="fileName">Имя файла, который необходимо передать</param>
        void SendFile(string fileName);
    }
}
